# AutoGen的真正作用：AI团队协调员 + 自动化工作流引擎
# 导入autogen包
import autogen

# 配置大模型 - 修正后的配置格式
config_list = [{
    "model": "qwen-max",
    "api_key": 'sk-4e88cf4db3e14894bafaff606d296610',
    "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "api_type": "openai",
    "timeout": 600,
    "max_retries": 3
}]

llm_config = {
    "config_list": config_list
}

# 定义鲜花电商的运营任务
inventory_tasks = [
    """查看当前库存中各种鲜花的数量，并报告哪些鲜花库存不足。""",
    """根据过去一个月的销售数据，预测接下来一个月哪些鲜花的需求量会增加。""",
]

market_research_tasks = ["""分析市场趋势，找出当前最受欢迎的鲜花种类及其可能的原因。"""]

content_creation_tasks = ["""利用提供的信息，撰写一篇吸引人的博客文章，介绍最受欢迎的鲜花及选购技巧。"""]

# 创建Agent角色
inventory_assistant = autogen.AssistantAgent(
    name="库存管理助理",
    llm_config=llm_config,
    system_message="你是一名库存管理专家，擅长分析库存数据和预测需求。请用中文回复。"
)

market_research_assistant = autogen.AssistantAgent(
    name="市场研究助理",
    llm_config=llm_config,
    system_message="你是一名市场研究专家，擅长分析市场趋势和消费者偏好。请用中文回复。"
)

content_creator = autogen.AssistantAgent(
    name="内容创作助理",
    llm_config=llm_config,
    system_message="""
        你是一名专业的写作者，以洞察力强和文章引人入胜著称。
        你能将复杂的概念转化为引人入胜的叙述。
        当一切完成后，请回复"结束"。
        请用中文回复。
        """
)

# 创建用户代理 - 禁用代码执行
user_proxy_auto = autogen.UserProxyAgent(
    name="用户代理_自动",
    human_input_mode="NEVER",
    is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("结束"),
    code_execution_config=False,
    llm_config=False
)

user_proxy = autogen.UserProxyAgent(
    name="用户代理",
    human_input_mode="ALWAYS",
    is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("结束"),
    code_execution_config=False,
    llm_config=False
)

# 测试配置
print("测试配置...")
test_user = autogen.UserProxyAgent(
    name="测试用户",
    human_input_mode="NEVER",
    code_execution_config=False,
    llm_config=False
)

test_agent = autogen.AssistantAgent(
    name="测试助手",
    llm_config=llm_config,
    system_message="你是一个测试助手。当用户说'请回复测试成功'时，你只需要回复'测试成功'，不要添加其他内容。"
)

# 直接进行测试，不等待回复
test_user.send(
    recipient=test_agent,
    message="请回复测试成功"
)

print("测试消息已发送，继续执行主流程...")

# 发起对话
try:
    print("开始对话...")

    # 第一个对话：库存管理
    print("\n=== 库存管理对话 ===")
    user_proxy_auto.initiate_chat(
        inventory_assistant,
        message=inventory_tasks[0],
        clear_history=True,
        max_turns=2  # 限制对话轮数
    )

    # 第二个对话：市场研究
    print("\n=== 市场研究对话 ===")
    user_proxy_auto.initiate_chat(
        market_research_assistant,
        message=market_research_tasks[0],
        max_turns=2
    )

    # 第三个对话：内容创作
    print("\n=== 内容创作对话 ===")
    user_proxy.initiate_chat(
        content_creator,
        message=content_creation_tasks[0] + " 我希望在博客文章中包含一张数据表格或图表。",
        max_turns=3
    )

except Exception as e:
    print(f"对话过程中发生错误: {e}")

    # 尝试更简单的对话
    try:
        print("\n尝试简单对话...")
        simple_user = autogen.UserProxyAgent(
            name="简单用户",
            human_input_mode="NEVER",
            code_execution_config=False,
            llm_config=False
        )

        simple_assistant = autogen.AssistantAgent(
            name="简单助手",
            llm_config=llm_config,
            system_message="你是一个简单的助手，请用中文简短回复。"
        )

        simple_user.initiate_chat(
            simple_assistant,
            message="你好，请回复'你好世界'",
            max_turns=1
        )

    except Exception as e2:
        print(f"简单对话也失败: {e2}")

print("\n程序执行完成")



"""
上面的代码展示了AutoGen的基础功能：让多个AI协作。但AutoGen还能做到：
  1.递归对话：AI可以自己召唤其他AI帮忙
  2.工具使用：AI可以写代码并执行
  3.长期记忆：AI可以记住之前的对话
  4.人类介入：在关键节点让人类做决策
  5.自定义行为：完全定制AI的工作方式
  
简单总结：AutoGen不是简单的"多个AI聊天"，而是一个完整的"AI自动化协作系统"：
  单个AI = 一个聪明但什么都要自己做的员工
  AutoGen = 一个专业的团队 + 自动化的工作流程 + 智能的项目管理
"""